java为什么我的KeyAdapter总是落后一步?
我有下面的代码,它意味着每次按下一个键,焦点在JTextField内时更新JTextArea,并将JTextField的内容附加到JTextArea内的新行上
我的问题是,每次我按下一个键,JTextArea更新总是在我想要的地方后面一个键
例如: 我在JTextField中键入“cat”,JTextArea中只显示“ca”,而不是我想要的完整字符串“cat”
感谢您的建议,感谢您抽出时间阅读
import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class Testing extends JFrame {
JTextField text;
JTextArea textArea;
public static void main(String[] args) {
Testing gui = new Testing();
gui.go();
}
public void go() {
this.setLayout(new BorderLayout());
text = new JTextField();
text.addKeyListener(new TestKeyListener());
textArea = new JTextArea();
this.add(text, BorderLayout.NORTH);
this.add(textArea, BorderLayout.CENTER);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setSize(300,300);
this.setVisible(true);
}
private class TestKeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent evt) {
textArea.append(text.getText() + "\n");
}
}
}
# 1 楼答案
这是因为
keyPressed
甚至在键入的字符保存到JTextField文档之前就发生了。因此,当你试图检索文本时,你“似乎”比实际值落后了一步,但事实并非如此——JTextField目前根本没有新的值我知道两种可能的方法来倾听JTextField文档的更改,以实现您想要实现的目标,每种方法都适用于这种特定情况: